package com.itheima.d14_extends_constructor;

/**
 * 子类构造器的特点：
 *  子类的全部构造器，都会先调用父类的构造器，再执行自己。
 *
 *  子类构造器是如何实现调用父类构造器的：
 * 默认情况下，子类全部构造器的第一行代码都是 super() （写不写都有） ，它会调用父类的无参数构造器。
 * 如果父类没有无参数构造器，则我们必须在子类构造器的第一行手写super(….)，指定去调用父类的有参数构造器。
 */
class F{
    public F(){
        System.out.println("===F的无参数构造器执行了===");
    }

    public F(String name, int age){
        System.out.println("=========F类的有参构造器被调用了=========");
    }
}

class Z extends F{
    public Z(){
         super(); // 默认存在的
        //super("播妞", 17);
        System.out.println("===子类Z的无参数构造器 执行了===");
    }

    public Z(String name){
        // super(); // 默认存在的
        super("播妞", 17);
        System.out.println("===子类Z的有参数构造器 执行了===");
    }
}

public class Test {
    public static void main(String[] args) {
        // 目标：先认识子类构造器的特点，再掌握这个特点的常见应用场景。
        Z z = new Z();

        System.out.println("=========================================");

        Z z2 = new Z("播妞");
    }
}
